package com.example.controller;

import com.example.domain.dto.UserInfoResponse;
import com.example.domain.po.User;
import com.example.domain.response.HttpResponse;
import com.example.service.UserService;
import com.example.utils.SecurityUtils;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

// UserController.java
/**
 * 用户控制器类，处理与用户相关的HTTP请求
 */
@RestController
@RequestMapping("/user")
@RequiredArgsConstructor
public class UserController {

    // 用户服务接口，用于处理用户业务逻辑
    private final UserService userService;

    /**
     * 获取当前用户的信息
     *
     * 此方法首先尝试获取当前用户的用户名，如果未能获取到（即用户未认证），
     * 则返回错误响应，错误码为401，表示未认证
     * 如果用户已认证，则调用用户服务接口获取用户信息，并作为响应返回
     *
     * @return 包含用户信息的响应对象，如果用户未认证，则返回错误响应
     */
    @GetMapping("/info")
    public HttpResponse<UserInfoResponse> getUserInfo() {
        // 尝试获取当前用户的用户名
        String username = SecurityUtils.getCurrentUsername();
        // 检查用户名是否为空，如果为空，则用户未认证，返回错误响应
        if (username == null) {
            return (HttpResponse<UserInfoResponse>)HttpResponse.error(401, "未认证");
        }
        // 用户已认证，调用用户服务接口获取用户信息，并作为响应返回
        return userService.getUserInfo(username);
    }

    /**
     * 获取用户的详细信息
     */
    @GetMapping("/details")
    public HttpResponse<User> getUserDetails() {
        String username = SecurityUtils.getCurrentUsername();
        if (username == null) {
            return (HttpResponse<User>)HttpResponse.error(401, "未认证");
        }
        User user =userService.getUserDetail(username);
        return HttpResponse.success(user);
    }
}